<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .goTop{width:100px;height:40px;position: absolute;left:0;top:200px;background: #ccc;line-height: 40px;text-align: center;}
    </style>
</head>
<body>
    <div class="goTop">回到顶部</div>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <p>这是段落</p>
    <p>这是段落</p>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <p>这是段落</p>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
    <h1>这是标题</h1>
</body>
<script>

    const oGoTop = document.querySelector(".goTop");
    const t = oGoTop.offsetTop;
    // 给页面添加滚动事件
    document.onscroll = function(){
        // 获取滚走了的距离
        const scrollT = document.documentElement.scrollTop;
        // 将滚走了的距离 + 初始定位的top，重新设置给元素
        oGoTop.style.top = scrollT + t + "px";
    }

    let time;

    oGoTop.onclick = function(){
        clearInterval(time);
        time = setInterval(()=>{
            // 修改滚走了的距离为当前值累减
            document.documentElement.scrollTop -= 300;
            // 滚走了的距离为0，清除计时器
            if(document.documentElement.scrollTop === 0){
                clearInterval(time)
            }
        },30);
    }

</script>
</html>